package com.company.ThreadPoolDemo;

import com.company.ThreadPoolDemo.MyRunable;

import org.junit.Test;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class Main {

    public static void main(String[] args) {
	// write your code here
        ExecutorService cache = Executors.newCachedThreadPool();
        for (int i = 1; i < 10; i++) {
            cache.execute(new MyRunable(i));
        }
    }

    @Test
    public void cacheTP(){
        /**
         * SynchronousQueue：这个队列接收到任务的时候，会直接提交给线程处理，而不保留它，
         *
         * 如果所有线程都在工作怎么办 ？那就新建一个线程来处理这个任务！
         * 所以为了保证不出现<线程数达到了maximumPoolSize而不能新建线程>的错误，使用这个类型队列的时候，maximumPoolSize一般指定成Integer.MAX_VALUE，即无限大
         *
         *  return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
         *                                    60L, TimeUnit.SECONDS,
         *                                    new SynchronousQueue<Runnable>());
         * 核心线程池 为0
         * 每个线程缓存1分钟
         * */
        ExecutorService cache = Executors.newCachedThreadPool();
        for (int i = 1; i < 10; i++) {
            cache.execute(new MyRunable(i));
            /**
             * 执行顺序
             *启动===========================3===========================
             *启动===========================1===========================
             *启动===========================2===========================
             *启动===========================4===========================
             *启动===========================5===========================
             *启动===========================6===========================
             *启动===========================7===========================
             *启动===========================8===========================
             *启动===========================9===========================
             */
        }

    }


}
